【Arduino教程】如何使用红外控制空调 您所在的位置:网站首页 有不用红外线的空调遥控软件吗 - 搜狗问问 【Arduino教程】如何使用红外控制空调

【Arduino教程】如何使用红外控制空调

2024-07-04 12:45| 来源: 网络整理| 查看: 265

前言:(全是废话,可跳过)

在视频【Arduino】宿舍智能化计划 - 升级灯控+接入互联网+控制空调发布之后,不止一个人(其实截止到写这篇文章时就俩)询问我是如何控制空调的,然后我心想不如出个教程吧,因为懒得给每个人重复一遍过程了。

为什么选择文字性的教程呢?因为我觉得咱这个教程没有多少中间过程要看,基本上全都是第一步干啥,第二步干啥,第三步干啥这样式的,与其录个视频,让人听我嘚嘚半天也听不到个重点,不如写篇教程,让大家能用自己的节奏去阅读。

目录〇、红外知识准备一、硬件准备二、红外信号捕获三、红外信号发射四、生成红外编码

其中〇一二三是基础部分,看完后可以做到记录空调遥控器发射的信号,然后把记录的信号发射给空调。如果你的目的只是简单的控制空调开机和关机或者需要空调变换的状态有限,那么看完〇一二三即可。第四部分是进阶,会讲如何无中生有生成红外信号,如果你的目的是复刻一个空调遥控器出来或者需要空调变换的状态比较多,那么你应该需要看完第四部分(当然,你要是说把空调的所有组合都录下来,也不是不行,咱也不拦着)。

〇、红外知识准备

网页链接:http://www.51hei.com/bbs/dpj-119467-1.html

因为这里不能将外站链接作为超链接,因此我直接将网址放出来。我也是看这里才了解了基本的红外遥控知识。

主要需要看一下报头脉冲、报头间距、码段间距以及“1”和“0”的定义。

一、硬件准备

Arduino开发板任一(本文以Uno、Nano为例)

面包板、杜邦线(能连电路就行,是不是这俩无所谓)

红外接收头(我用的VS1838B,如图1)

红外发射管及其配套电阻(我用的3mm发射管,如图2)

图1  红外接收头图2  红外发射管二、红外信号捕获

首先需要下载IRremote库,直接在Arduino的库管理器里搜索就行,如图3所示。

图3  IRremote库

安装后打开IRremote中的“ReceiveDump”示例,我们需要把36行注释掉,取消注释37行,完成后如图4所示。此举目的是更改“RAW_BUFFER_LENGTH”的宏定义值,因此直接把第36行的值改大也可(此值需要足够大,否则将无法接收完整的遥控信号)。

图4  更改“RAW_BUFFER_LENGTH”宏定义值

取消掉第52行的注释,并将其值改为50000,如图5所示。我理解的这个值的意思是两个信号间隔多少微秒以内会被认为是同一组。

图5  使“RECORD_GAP_MICROS”生效

烧录程序,烧录完成后打开串口监视器,调整波特率为115200,随后监视器会输出一些信息,如图6所示。我们可以看到接收红外信息的的引脚为2。

图6  引脚信息

连接红外接收管与开发板,VS1838B管脚信息如图7所示,根据图6中的提示信息,OUT连接板子上的二号引脚,VCC连5V,GND接地即可。

图7  VS1838B管脚信息

现在,拿起手中的遥控器,冲着红外接收头来一发,然后你就会看到串口监视器开始输出大量信息,如图8所示。输出的信息即你刚才发射的信号信息。

图8  串口监视器打印信息

图8中的rawData[280]是为那些需要看本教程第四部分的人准备的,如果你只打算看一二三,那么只需要关注图9中相应的信息即可。

图9  发射红外信号使用的数据三、发射信号

如图10是一个简单的发射代码,我把图9中的raw劈成了两半发送,因为一次性发送完整的数据会报错,如图11所示。电路连接就是IRpin指定的引脚连接红外发射管正极,红外发射管负极连接一个合适的电阻,电阻再接地。已经验证代码可以成功使空调开机。

图10  简单的发射代码图11  溢出

需要注意的是,截断时应保证每一部分的数组长度都是偶数,最后一部分可以例外,因为数据代表的含义是“高电平持续时间,低电平持续时间,高电平持续时间,低电平持续时间……”,如果前边不是偶数长度,之后就会出现电平反转的情况。为什么最后一组可以不是偶数个呢?因为如果是偶数,最后一个数代表着低电平持续时间,持续完后继续低电平,因此该数值无意义,也就可以不写。(实际上本段直接说高低电平并不准确,应该是有脉冲和无脉冲)

另外,通过图10我们可以看出,直接将信息复制过来,占用的动态内存较大,因此实际使用时可能还需要压缩算法。通过第〇部分我们知道报头、报头间距、码段间距都是固定数值,也就是图8中数值绝对值超过2000的部分(除了第一个-3276750)。因此我们只需要存储代表01的部分,然后需要用的时候将01内容转换为对应的脉冲信息,再添加上报头之类的内容就可以。具体做法不再列出,请读者自行编码和解码。

四、生成红外编码

还是参考〇中的内容,虽然〇中内容不全面甚至有部分错误,但是让我们大致知道都有哪些字段,节省了我们很大的时间。

首先我们需要将图8中的信息转换为01序列,这样容易看一些。即,将类似于“+650,-1650”的信息解读为“1”,“+650,-550”解读为“0”。注意,中间的“+650,-19700”和“+650,-39350”可认为发送了1,也可认为发送了0,无影响。由于需要转换的数据量巨大,因此推荐使用程序自动去转换。

〇中空调编码只有两段,而本教程中空调编码是四段。甚至,当我启动定时功能的时候,接收到的空调编码变成了六段,这点需要注意。

根据我的观测,我空调遥控器发送四段信号时,第一段和第三段的信号除了1比特外是完全相同的。

图12-14是我制作的用来分析编码的Excel,基本思想就是通过控制变量法去找到哪些字段是干什么的。(在此仅仅是提供一种分析的思路,未提供Excel全部内容)。

图12图13图14

目前我只探索了部分编码,定时功能的编码没有探索,下面我将分享一下格力YAP0F的基本编码格式。

首先是模式,占3比特,反向读取(看完本段你就会明白什么叫反向读取)。自动值为0,制冷为1,除湿为2,送风为3,制热为4。例如模式是制冷,值为1,则二进制为001,然后将顺序颠倒过来,变成100,这就是制冷的编码。又比如送风,值为3,对应二进制为011,颠倒过来编程110,则110就是送风的编码。之后所有和数值有关的情况都类似,出现类似情况时我会像本段一样写一个“反向读取”。我们称编码前的值为数值,编码后的值为编码值,例如制冷的数值为1,编码值为100,送风的数值为3,编码值为110。

之后是开关机,占1比特,开机为1,关机为0。

风速,占2比特,反向读取。YAP0F风速分六档,自动风值为0,一级风值为1,二级风值为2,三级风及之后值为3。

是否扫风,占1比特,只有左右和上下都不扫时值为0,其余均为1。

是否睡眠,占1比特,没捣鼓明白,不需要此功能直接填0,需要此功能请自己探索。

温度,占4比特,反向读取。16度为0,17度为1,以此类推,30度为14。

定时,占8比特,不需要此功能全0即可,需要此功能请自己探索。

超强,占1比特,开启为1,不开启为0。

灯光,占1比特,开灯光为1,关灯光为0。

健康,占1比特,我的遥控无此功能,总为0。

干燥/辅热,占1比特,开启为1,不开启为0。

换气,占1比特,我的遥控无此功能,总为0。

然后是一段总是相同的神秘代码,00010100101。

以上部分组成了第一段编码。将最后的神秘代码改成00011100101,则组成的是第三段编码。

下面介绍第二段编码的内容

上下扫风,占1比特,扫风为1,不扫为0。

空白段,占3比特,总为000。

左右扫风,占1比特,扫风为1,不扫为0。

空白段,占3比特,总为000。

显示温度,占2比特,我的遥控无此功能,总为0。

空白段,占18比特,除了制热模式外总为000000000000000000,制热模式为000000000000000001。

第二段指令校验码,占4比特,反向读取。值为模式数值+2+左右扫风+温度数值,得到编码值后如果是关机指令则反转最后一比特,否则不反转。例如模式为制冷,左右扫风关,16度,关机,则校验码数值为1+2+0+0=3,二进制为0011,编码值为1100,由于是关机,最后一比特要反转,最终得到的校验码为1101。

结束符,占1比特。这个就是那个“+650,-39350”的位置,是0是1不重要。

以上部分组成了第二段编码。

下面介绍第四段编码内容

睡眠模式相关,占20比特(实际上这20比特不全是睡眠模式相关,因为没有仔细研究,因此全归到睡眠模式里),不需要睡眠模式则直接全填0,需要请自行探究。

风速,占3比特,反向读取。之前第一段也出现了风速值,其占2比特,无法表示四个档位的风速,这个可以。

E享/定时,占5比特,不需要这些功能则全填0,需要请自行探究。

第四段指令校验码,占4比特,反向读取。值为模式数值+2+风速数值+温度数值,得到编码值后如果是关机指令则反转最后一比特,否则不反转。例如制热,V风速,30度,开机,则校验码数值为4+2+5+14=25,二进制为11001,只取后四位,为1001,编码值为1001,开机,不反转,则最终编码即为1001。

结束符,占1比特,是0是1无所谓。

以上部分组成了第四段编码。

后记:

第一次写教程,没想到这么累,属于是眼大肚子小了。但是说实话写的也不是特别详细,尤其是第三部分关于压缩数据的描述和第四部分。我在此的作用可能只是起个引子,各种问题的解决方法还是要大家自己去思考。

有什么问题或者指出文章中的错误可以在评论区提或者私信我,我尽量一一回答。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有